\section{Safari}
\label{sec:safari}
Safari ist ein durch das Unternehmen Apple entwickelter Webbrowser. Der Safari Webbrowser ist standardmässig in jeder Mac OS X Installation inbegriffen. Seit dem Jahr 2007 wird neben dem Betriebssystem Mac OS X auch Windows unterstützt.

\subsection{Architektur}
\label{subsec:safari_architektur}
Wie der Chrome Browser benutzt Safari ">WebKit"< als \gls{layout_engine}. ">WebKit"< wurde ursprünglich durch Apple als Abspaltung der ">KHTML"< \gls{layout_engine} entwickelt. Die neuste Version des Safari Browser benutzt ">Nitro"< als \gls{javascript_engine}, eine Weiterentwicklung der ">JavaScriptCore"< Engine von Apple.

\subsection{Erweiterungsmöglichkeiten}
\label{subsec:safari_erweiterungsmoeglichkeiten}
Seit der Version 5.0 unterstützt der Safari Browser Erweiterungen. Für die Entwicklung von Erweiterungen benötigt man ein Safari Developer Zertifikat, das man kostenlos durch die Registrierung als Apple Developer erwerben kann. Über den in Safari integrierten Extension Builder können Erweiterungen angelegt, getestet und gepackt werden.

Ähnlich wie bei Chrome oder Opera Erweiterungen verwendet Safari das Konzept von Background Page und Content Scripts. Diese bestehen aus \acrshort{html}"=, \acrshort{css}"= und JavaScript"=Dateien. Der Safari Browser stellt mit der ">Safari Extensions JavaScript \acrshort{api}"< ein Schnittstelle zur Verfügung, über die eine Erweiterung auf browserspezifische Funktionen zugreifen kann und Content Scripts mit der Global \acrshort{html} Page kommunizieren können.

\autoref{fig:safari_architecture} und die nachfolgende Auflistung erläutern das Konzept und die Funktionsweise von Safari Erweiterungen und die Interaktion einzelner Komponenten untereinander.

\begin{figure}[H]
   \centering
   \includegraphics[width=0.8\textwidth]{images/safari_architecture}
   \caption[Safari Erweiterungskonzept]{Übersicht über das Erweiterungskonzept des Safari Browsers (angelehnt an \cite[S. 14]{apple2012_safari_documentation})}
   \label{fig:safari_architecture}
\end{figure}

Eine Safari Erweiterung setzt sich hauptsächlich aus einer oder mehreren der nachfolgenden Komponenten zusammen:

\begin{itemize}
  \item{\textbf{\textit{Manifest-Datei:}} Die \verb|Info.plist| Datei beinhaltet grundlegende Angaben über die Erweiterung, wie die wichtigsten Dateien, Zugriffsrechte und Meta"=Informationen. Die Manifest"=Datei wird automatisch durch den Extension Builder erstellt und ist für jede Safari Erweiterung erforderlich. Property List Dateien ">.plist"< enthalten unter Mac OS X serialisierte Eigenschaften von Applikation und sind meistens im \acrshort{xml}"=Format gespeichert.}
  \item{\textbf{\textit{Global \acrshort{html} Page:}} Bei der Global \acrshort{html} Page handelt es sich um eine unsichtbare \acrshort{html}"=Seite (typischerweise \verb|Global.html| genannt), die im Hintergrund in einem eigenen Prozess des Browsers läuft. Die Global \acrshort{html} Page hat vollen Zugriff auf die ">Safari Extensions JavaScript \acrshort{api}"< und kann über den Webpage Proxy mit Injected Scripts und anderen Content Pages kommunizieren.}
  \item{\textbf{\textit{Content Pages:}} Erweiterung können gewöhnliche \acrshort{html}"=Seiten enthalten, die eine grafische Benutzerschnittstelle der Erweiterung repräsentieren. Dies können Popovers oder ander Content Pages sein. Content Pages können mit der Global \acrshort{html} Page via Tab und Webpage Proxy (Messaging) untereinander kommunizieren.}
  \item{\textbf{\textit{Injected Scripts:}} Injected Scripts sind JavaScript Dateien die im Kontext der aktuell geladenen Webseite ausgeführt werden. Sie haben somit vollen Zugriff auf das \gls{_dom} der geladenen Webseite und können dieses beliebig manipulieren. Injected Scripts haben einen limitierten Zugriff auf die ">Safari Extensions JavaScript \acrshort{api}"< und unterliegen der \gls{same_orgin_policy}. Über die Tab und Webpage Proxy kann indirekt mit der Global \acrshort{html} Page kommuniziert werden.
  Injected Scripts im Safari Browser werden wie beim Chrome Browser in einer isolierten Umgebung ausgeführt und haben keinen Zugriff auf JavaScript"=Variablen und "=Methoden, die von der aktuell geladenen Webseite definiert wurden. }
\end{itemize}

\subsection{Vor- und Nachteile}
\label{subsec:safari_vor-und_nachteile}
Eine grosse Hilfe bei der Entwicklung von Safari Erweiterungen ist der Extension Builder. Die Meta-Informationen der Erweiterung werden direkt über das \acrshort{ui} des Extension Builders gepflegt. Die Manifest-Datei wird automatisch im Erweiterungsprojekt angelegt bzw. aktualisiert. Neben Content Scripts können auch JavaScript"=Libraries, wie z. B. JQuery oder \acrshort{css}"=Stylesheets in den Kontext einer geladenen Webseite injiziert werden. Apple bietet ein sehr umfangreiche Dokumentation über die Entwicklung von Safari Erweiterungen im \acrshort{html}"= und \gls{pdf}"=Format an. Erweiterungen lassen sich identisch zum Google Chrome Browser debuggen.

Im Vergleich zum Chrome und Opera Browser verfügen Safari Erweiterungen über keine eigene \acrshort{html}"=Seite um anwendungsspezifische Einstellungen zu verwalten. Dafür können Einstellungen direkt im Extension Builder konfiguriert werden. Diese Funktion unterstützt jedoch nur das Speichern von primitiven Datentypen, komplizierte Datenstrukturen können über diese Funktion nicht genutzt werden.



